#pragma once
#include <iostream>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <unordered_map>
#include <string>

class EchoServer {
public:
    EchoServer(int port);
    ~EchoServer();
    bool init();   // 初始化（创建socket、绑定、监听、epoll初始化）
    void start();  // 启动事件循环，处理客户端连接和数据

private:
    void setNonBlocking(int fd); // 设置socket为非阻塞模式
    int sendAll(int fd, const char* buffer, int len); // 完整发送数据
    int listenFd_;  // 监听socket
    int epollFd_;   // epoll实例fd
    int port_;      // 监听端口
    int totalConnections_; // 累计连接数
    static const int MAX_EVENTS = 1024;  // 单次epoll_wait最大事件数
    static const int BUFFER_SIZE = 1024; // 读写缓冲区大小
    std::unordered_map<int, std::string> pendingData_; // 待发送数据缓存
};
